let callbacks = []
let pending = false
let timerFunc
if(Promise){
    timerFunc = () =>{
        Promise.resolve().then(flush)
    }
} else if(MutationObserver){ // h5的异步方法，可以监听dom变化。监控完毕之后再来异步更新
    let observe = new MutationObserver(flush)
    let textNode = document.createTextNode(1) // 创建文本
    observe.observe(textNode,{ characterData: true}) //观测文本的内容
    timerFunc = () => {
        textNode.textContent = 2
    }
} else if(setImmediate) {
    timerFunc = () => {
        setImmediate(flush)
      }
} else if(setTimeout) {
    setTimeout(flush, 0)
}
// 处理兼容问题
function flush() {
    callbacks.forEach(cb=>cb())
    pending = false
}
export default function nextTick(cb) {
    callbacks.push(cb)
    if(!pending){
        timerFunc()  //这个方法就是异步方法。
        pending = true
    }
}

// 处理异步的几种方法
// promise。需要处理兼容问题。并不是所有浏览器都支持promise
// MutationObserver
// setImmediate
// setTimeout